package lib.gameEngine.core{
	import flash.display.DisplayObject;
	import flash.display.Sprite;
	
	/**
	 * 视图基类
	 * 
	 * 视图基类拥有如下功能：
	 * 
	 * 1、注册、发送通知
	 * 2、注册，获取
	 * 
	 * 视图不能执行删除功能，当需要删除某一视图或者模型时，只能以发送通知的方式通知控制器去执行
	 * 
	 * 
	 *  
	 * @author Sunix
	 * 
	 * 
	 * 
	 * @example 查看示例
	 * 
	 * <listing version="3.0"> 
	 * 
	 * package game.view.world{
	
		import flash.display.Sprite;
		
		import gameEngine.common.data.Notification;
		import gameEngine.core.View;
	  
		   public class World extends View{
	
		
			public function World(){
				super("world");  //为本视图命名
			}
	
			override protected function registerNotify():void{  //注册通知
				this.addNotify("world_init",onWorldInit);
			}
	
			private function onWorldInit(notify:Notification):void{  
				sprite = this.getSprite();   //获取全局舞台对象，因为world视图对象是整个游戏的核心舞台，所以他有必要取得该舞台对象，对于其余的视图或者控制器则不需要获取该对象
				//sprite = new Sprite();  //其他的视图对象只需如此处理即可
				 
				if(!this.getView("map"))       //判断map组件是否被注册
					this.registerView(new Map());
				var component:Sprite = this.getView(CoreName.MAP).getComponent();  //获取map组件中的sprite，即map的显示对象
				sprite.addChild(component);  //将显示对象添加到舞台
			}
		} 
	 }
	 * 
	 * 
	 * 
	 * </listing>
	 * 
	 */	
	public class View extends Core{
		
		/**
		 * 视图舞台
		 *  
		 */		
		protected var sprite:Sprite; 

		/**
		 * 构造函数
		 * 
		 *  
		 * @param name 视图名称
		 * 
		 */		
		public function View(name:String){
			super(name);
		}
		
		/**
		 * 获取本视图所包含的组件
		 * 
		 *  
		 * @return 组件
		 * 
		 */		
		public function getComponent():Sprite{
			return sprite;
		}
		
		/**
		 * 清空主舞台
		 * 
		 *  
		 * 
		 */		
		protected function clearSprite():void{
			clearGame();
		}
		
		protected function clearGame():void{
			var sprite:Sprite = getGameLayer();
			while(sprite.numChildren){
				sprite.removeChildAt(0);
			}
		}
		
		//TODO  增加remove方法
		protected function mapAdd(dis:DisplayObject):void{
			getMapLayer().addChild(dis);
		}
		
		protected function gameAdd(dis:DisplayObject):void{
			getGameLayer().addChild(dis);
		}
		
		protected function winAdd(dis:DisplayObject):void{
			getWinLayer().addChild(dis);
		}
	}
}